`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2020/09/21 20:56:40
// Design Name: 
// Module Name: Top
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module Top(
    input   wire        clk,
    input   wire        rst,
    
    output  wire [7:0]  o_leds,
    
    output  wire        o_lcd_wr,
    output  wire        o_lcd_rd,
    output  wire [7:0]  o_lcd_data,
    output  wire        o_lcd_cs,
    output  wire        o_lcd_rst,
    output  wire        o_lcd_rs
    );
    
    wire [31:0] inst_addr;
    wire [31:0] inst;
    
    wire [31:0] data_addr;
    wire [31:0] data;
    wire [31:0] wr_data;
    wire data_we;
    wire inst_en;
    
//    LCDControl lcd(
//        .clk(clk),
//        .rst(rst),
        
//        .i_data(wr_data),
//        .i_en(data_we && data_addr == 1),
        
//        .o_wr(o_lcd_wr),
//        .o_rd(o_lcd_rd),
//        .o_data(o_lcd_data),
//        .o_cs(o_lcd_cs),
//        .o_rst(o_lcd_rst),
//        .o_rs(o_lcd_rs)
//    );
    
    LightControl lc(
        .clk(clk),
        .rst(rst),
        .i_en(data_we),
//        .i_en(0),
        .i_ctrl(wr_data),
        .o_out(o_leds)
    );
    
    Carya cpu(
        .clk(clk),
        .rst(rst),
        
        .i_data(data),
        .i_inst(inst),
        
        .o_data_addr(data_addr),
        .o_wr_data(wr_data),
        .o_data_we(data_we),
        .o_inst_addr(inst_addr),
        .o_inst_en(inst_en)
    );
    
    blk_mem_gen_0 dm0(
        .addra(data_addr[9:0]),
        .clka(clk),
        .dina(wr_data),
        .douta(data),
        .ena(rst),
        .wea(data_we)
    );
    
    blk_mem_gen_1 im0(
        .addra(inst_addr[11:2]),
        .clka(clk),
        .dina(0),
        .douta(inst),
        .ena(rst),
        .wea(0)
    );
    
endmodule
